package  main.java.leetcode.editor.cn;
//2023-07-27 14:39:57
//在老式手机上，用户通过数字键盘输入，手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列，实现一个算法来返回匹配单词的列表。你
//会得到一张含有有效单词的列表。映射如下图所示： 
//
// 
//
// 示例 1: 
//
// 输入: num = "8733", words = ["tree", "used"]
//输出: ["tree", "used"]
// 
//
// 示例 2: 
//
// 输入: num = "2", words = ["a", "b", "c", "d"]
//输出: ["a", "b", "c"] 
//
// 提示： 
//
// 
// num.length <= 1000 
// words.length <= 500 
// words[i].length == num.length 
// num中不会出现 0, 1 这两个数字 
// 
// Related Topics 数组 哈希表 字符串 👍 37 👎 0

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class T9Lcci {
    public static void main(String[] args) {
        //创建该题目的对象方便调用
        Solution solution = new T9Lcci().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public List<String> getValidT9Words(String num, String[] words) {
        Map<Character,List<Character>> map = new HashMap<>();
        List<Character> list2 = new ArrayList<>();
        list2.add('a');list2.add('b');list2.add('c');
        List<Character> list3 = new ArrayList<>();
        list3.add('d');list3.add('e');list3.add('f');
        List<Character> list4 = new ArrayList<>();
        list4.add('g');list4.add('h');list4.add('i');
        List<Character> list5 = new ArrayList<>();
        list5.add('j');list5.add('k');list5.add('l');
        List<Character> list6 = new ArrayList<>();
        list6.add('m');list6.add('n');list6.add('o');
        List<Character> list7 = new ArrayList<>();
        list7.add('p');list7.add('q');list7.add('r');list7.add('s');
        List<Character> list8 = new ArrayList<>();
        list8.add('t');list8.add('u');list8.add('v');
        List<Character> list9 = new ArrayList<>();
        list9.add('w');list9.add('x');list9.add('y');list9.add('z');
        map.put('2',list2);map.put('3',list3);map.put('4',list4);map.put('5',list5);
        map.put('6',list6);map.put('7',list7);map.put('8',list8);map.put('9',list9);

        char[] nums = num.toCharArray();
        List<String> res = new ArrayList<>();
        for(String word : words){
            for (int i = 0;i<word.length();i++){
                List<Character> characters = map.get(nums[i]);
                if(characters.contains(word.charAt(i))){
                    if(i == word.length()-1){
                        res.add(word);
                    }
                }else {
                    break;
                }
            }
        }
        return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
